package services

import (
	"encoding/json"
	"fmt"
)

// 解析DEVICE_UP包的数据并发送到平台
func (d *DeviceData) ParseDeviceUpData() error {
	// 校验数据包长度
	if len(d.RegisterData) < 20 {
		return fmt.Errorf("payload:%v data length is invalid", d.RegisterData)
	}
	// DEVICE_UP中包含遥测和属性数据
	var deviceDataTelemetry DeviceDataTelemetry
	var deviceDataAttribute DeviceDataAttribute
	// 前7个字节是时间 年 月 日 时 分 秒 星期，用|分割
	deviceDataAttribute.EquipmentTime = fmt.Sprintf("%d|%d|%d|%d|%d|%d|%d", d.RegisterData[0], d.RegisterData[1], d.RegisterData[2], d.RegisterData[3], d.RegisterData[4], d.RegisterData[5], d.RegisterData[6])
	// 温度
	deviceDataTelemetry.Temperature = d.RegisterData[7]
	// 湿度
	deviceDataTelemetry.Humidity = d.RegisterData[8]
	// 采集电流1
	deviceDataAttribute.CollectedCurrent1 = d.RegisterData[9]
	// 采集电流2
	deviceDataAttribute.CollectedCurrent2 = d.RegisterData[10]
	// 空载电流
	deviceDataAttribute.NoLoadCurrent = d.RegisterData[11]
	// 空闲电流
	deviceDataAttribute.IdleCurrent = d.RegisterData[12]
	// 满载电流
	deviceDataAttribute.FullLoadCurrent = d.RegisterData[13]
	// 硬件版本
	deviceDataAttribute.HardwareVersion = d.RegisterData[14]
	// 控制器状态
	deviceDataAttribute.ControllerStatus = d.RegisterData[15]
	// 故障报警
	deviceDataAttribute.FaultAlarm = d.RegisterData[16]
	// 内部寄存器2
	deviceDataAttribute.InternalRegister2 = d.RegisterData[17]
	// 内部寄存器3
	deviceDataAttribute.InternalRegister3 = d.RegisterData[18]
	// 内部寄存器4
	deviceDataAttribute.InternalRegister4 = d.RegisterData[19]

	//logrus.Info("deviceDataTelemetry:", deviceDataTelemetry)
	//deviceDataTelemetry转json
	payload, err := json.Marshal(deviceDataTelemetry)
	if err != nil {
		return err
	}
	// 发送数据到平台
	err = PublishTelemetry(d.Mac, payload)
	if err != nil {
		return err
	}

	//logrus.Info("deviceDataAttribute:", deviceDataAttribute)
	//deviceDataAttribute转json
	payload, err = json.Marshal(deviceDataAttribute)
	if err != nil {
		return err
	}
	// 发送数据到平台
	err = PublishAttributes(d.Mac, payload)
	if err != nil {
		return err
	}
	return nil
}
